home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / PROGSCAL / TINYPASC.LZH / TURUN.LST < prev    next >
File List  |  1986-02-24  |  20KB  |  405 lines

  1. TURUN.ASM                                                               2/24/86
  2. Page: 1                                                                14:08:03
  3.  
  4.  
  5. LOC  OBJ          LINE  SOURCE                               CHASM version 4.03
  6. 0100                 1   ; Tiny Pascal assembler code
  7. 0100 BC290B          2            MOV   SP,OFFSET(STACKORG)
  8. 0103 8BEC            3            MOV   BP,SP
  9. 0105 E81901          4            CALL  MAIN
  10. 0108 CD20            5            INT   020H
  11. 010A                 6   ; <STDIO.HDR> included
  12. 010A                 7  ;  STDIO.HDR
  13. 010A                 8  ;
  14. 010A                 9  ;  READ and WRITE routines needed for Tiny Pascal
  15. 010A                10  ;
  16. 010A                11  SYS_RCHAR   PROC   NEAR   ; Read single character from
  17. 010A B401           12              MOV    AH,1
  18. 010C CD21           13              INT    021H
  19. 010E C3             14              RET           ; value comes back in AL
  20. 010F                15              ENDP
  21. 010F                16  
  22. 010F                17  SYS_WRCHAR  PROC   NEAR   ; Write a single character (
  23. 010F B402           18              MOV    AH,2
  24. 0111 CD21           19              INT    021H
  25. 0113 C3             20              RET
  26. 0114                21              ENDP
  27. 0114                22  
  28. 0114                23  SYS_WHEX    PROC   NEAR   ; Write a single HEX number 
  29. 0114 80FA0A         24              CMP    DL,10
  30. 0117 7C07           25              JL     SYS_01
  31. 0119 80C237         26              ADD    DL,55     ; 'A' - 10
  32. 011C E8F0FF         27              CALL   SYS_WRCHAR
  33. 011F C3             28              RET
  34. 0120 80C230         29  SYS_01      ADD    DL,'0'
  35. 0123 E8E9FF         30              CALL   SYS_WRCHAR
  36. 0126 C3             31              RET
  37. 0127                32              ENDP
  38. 0127                33  
  39. 0127                34  SYS_IWRT    PROC   NEAR   ; Write an integer to stdout
  40. 0127 B604           35              MOV    DH,4   ; used as a counter
  41. 0129 D1C0           36  SYS_11      ROL    AX
  42. 012B D1C0           37              ROL    AX
  43. 012D D1C0           38              ROL    AX
  44. 012F D1C0           39              ROL    AX
  45. 0131 8AD0           40              MOV    DL,AL
  46. 0133 80E20F         41              AND    DL,0FH
  47. 0136 50             42              PUSH   AX
  48. 0137 E8DAFF         43              CALL   SYS_WHEX
  49. 013A 58             44              POP    AX
  50. 013B FECE           45              DEC    DH
  51. 013D 75EA           46              JNZ    SYS_11
  52. 013F C3             47              RET
  53. 0140                48              ENDP
  54. 0140                49  
  55. 0140                50  SYS_SWRT    PROC   NEAR   ; Write a string terminated 
  56. 0140 8A5700         51  SYS_21      MOV    DL,0[BX]
  57. 0143 80FA00         52              CMP    DL,0
  58. 0146 7501           53              JNZ    SYS_22   ; zero terminator?
  59. 0148 C3             54              RET
  60. 0149 E8C3FF         55  SYS_22      CALL   SYS_WRCHAR
  61. 014C 43             56              INC    BX
  62. 014D EBF1           57              JMPS   SYS_21
  63. 014F                58              ENDP
  64. 014F                59  
  65. 014F                60  SYS_WRTLN   PROC   NEAR    ; write carriage return/lin
  66. 014F B20D           61              MOV    DL,0DH
  67. 0151 E8BBFF         62              CALL   SYS_WRCHAR
  68. 0154 B20A           63              MOV    DL,0AH
  69. 0156 E8B6FF         64              CALL   SYS_WRCHAR
  70. 0159 C3             65              RET
  71. 015A                66              ENDP
  72. 015A                67  
  73. 015A                68  READ        PROC   NEAR         ; read a HEX number fr
  74. 015A BA0000         69              MOV    DX,0         ; clear DX
  75. 015D E8AAFF         70  READ_01     CALL   SYS_RCHAR    ; get one character in
  76. 0160                71                      ; won't affect DX
  77. 0160 3C0D           72              CMP    AL,0DH
  78. 0162 7506           73              JNZ    READ_02
  79. 0164 52             74              PUSH   DX           ; save the thing we've
  80. 0165 E8E7FF         75              CALL   SYS_WRTLN    ; send a carriage retu
  81. 0168 58             76              POP    AX           ; was an ENTER
  82. 0169 C3             77              RET
  83. 016A 3C20           78  READ_02     CMP    AL,' '
  84. 016C 74EF           79              JZ     READ_01      ; ignore spaces
  85. 016E 2C30           80              SUB    AL,'0'       ; start conversion to 
  86. 0170 3C09           81              CMP    AL,9
  87. 0172 7E02           82              JLE    READ_03
  88. 0174 2C07           83              SUB    AL,7         ; turn 'A' into 0AH
  89. 0176 3C0F           84  READ_03     CMP    AL,0FH
  90. 0178 7E02           85              JLE    READ_04
  91. 017A 2C20           86              SUB    AL,32        ; turn 'a' into 0AH
  92. 017C 240F           87  READ_04     AND    AL,0FH       ; clip for good measur
  93. 017E D1E2           88              SHL    DX           ; prepare DX for hex v
  94. 0180 D1E2           89              SHL    DX
  95. 0182 D1E2           90              SHL    DX
  96. 0184 D1E2           91              SHL    DX
  97. 0186 08C2           92              OR     DL,AL
  98. 0188 EBD3           93              JMPS   READ_01      ; go do some more
  99. 018A                94              ENDP
  100. 018A                95  
  101. 018A                96  READLN      PROC   NEAR
  102. 018A EBCE           97              JMPS   READ         ; does the same thing
  103. 018C                98              ENDP
  104. 018C                99  
  105. 018C               100   ; ... end of include STDIO.HDR
  106. 018C               101   ;   {TURUN -- A sample program written in Tiny Pascal
  107. 018C               102   ;   var I, J, K, PROBLEM;
  108. 018C               103   ;   
  109. 018C               104   ;   {*********************}
  110. 018C               105   ;   function ISLESS(N1, N2);
  111. 018C               106   ;   begin  {returns 1 if n1<n2, 0 otherwise}
  112. 018C               107   ;     if n2-n1 then isless:=1   {truth value test is 
  113. 018C               108   ;     else isless:=0;
  114. 018C               109   ;     end;
  115. 018C               110  ISLESS    PROC  NEAR
  116. 018C 55            111            PUSH  BP
  117. 018D 8BEC          112            MOV   BP,SP
  118. 018F 8B4604        113            MOV   AX,4[BP] ; N2
  119. 0192 2B4606        114            SUB   AX,6[BP] ; N1
  120. 0195 3D0000        115            CMP   AX,0
  121. 0198 7E08          116            JLE   XXX0
  122. 019A C746080100    117            MOVW  8[BP],1 ; ISLESS
  123. **** Diagnostic: Could use JMPS
  124. 019F E90500        118            JMP   XXX1
  125. 01A2               119  XXX0      EQU   $
  126. 01A2 C746080000    120            MOVW  8[BP],0 ; ISLESS
  127. 01A7               121  XXX1      EQU   $
  128. 01A7 8B4608        122            MOV   AX,8[BP] ; ISLESS
  129. 01AA 5D            123            POP   BP
  130. 01AB C20600        124            RET   6
  131. 01AE               125            ENDP
  132. 01AE               126   ;    SYMBOL TABLE
  133. 01AE               127   ; ISLESS                          8[BP]
  134. 01AE               128   ; N1                              6[BP]
  135. 01AE               129   ; N2                              4[BP]
  136. 01AE               130  
  137. 01AE               131   ;     
  138. 01AE               132   ;   function ADDEMUP(LOWER, UPPER, SUM);
  139. 01AE               133   ;   begin end;    {makes it a forward declaration}
  140. 01AE               134   ;   
  141. 01AE               135   ;   {*********************}
  142. 01AE               136   ;   function ISEQUAL(N1, N2);
  143. 01AE               137   ;   begin
  144. 01AE               138   ;     if n2-n1 then isequal:=0   {false}
  145. 01AE               139   ;     else
  146. 01AE               140   ;     if n1-n2 then isequal:=0
  147. 01AE               141   ;     else isequal:=1;
  148. 01AE               142   ;     end;
  149. 01AE               143  ISEQUAL   PROC  NEAR
  150. 01AE 55            144            PUSH  BP
  151. 01AF 8BEC          145            MOV   BP,SP
  152. 01B1 8B4604        146            MOV   AX,4[BP] ; N2
  153. 01B4 2B4606        147            SUB   AX,6[BP] ; N1
  154. 01B7 3D0000        148            CMP   AX,0
  155. 01BA 7E08          149            JLE   XXX2
  156. 01BC C746080000    150            MOVW  8[BP],0 ; ISEQUAL
  157. **** Diagnostic: Could use JMPS
  158. 01C1 E91800        151            JMP   XXX3
  159. 01C4               152  XXX2      EQU   $
  160. 01C4 8B4606        153            MOV   AX,6[BP] ; N1
  161. 01C7 2B4604        154            SUB   AX,4[BP] ; N2
  162. 01CA 3D0000        155            CMP   AX,0
  163. 01CD 7E08          156            JLE   XXX4
  164. 01CF C746080000    157            MOVW  8[BP],0 ; ISEQUAL
  165. **** Diagnostic: Could use JMPS
  166. 01D4 E90500        158            JMP   XXX5
  167. 01D7               159  XXX4      EQU   $
  168. 01D7 C746080100    160            MOVW  8[BP],1 ; ISEQUAL
  169. 01DC               161  XXX5      EQU   $
  170. 01DC               162  XXX3      EQU   $
  171. 01DC 8B4608        163            MOV   AX,8[BP] ; ISEQUAL
  172. 01DF 5D            164            POP   BP
  173. 01E0 C20600        165            RET   6
  174. 01E3               166            ENDP
  175. 01E3               167   ;    SYMBOL TABLE
  176. 01E3               168   ; ISEQUAL                         8[BP]
  177. 01E3               169   ; N1                              6[BP]
  178. 01E3               170   ; N2                              4[BP]
  179. 01E3               171  
  180. 01E3               172   ;     
  181. 01E3               173   ;   {***********************}
  182. 01E3               174   ;   function ADDEMUP(LOWER, UPPER, SUM);
  183. 01E3               175   ;         {SUM is a local}
  184. 01E3               176   ;   begin
  185. 01E3               177   ;     sum:=0;
  186. 01E3               178   ;     while isless(lower, upper) do begin
  187. 01E3               179   ;       sum:=sum+lower;
  188. 01E3               180   ;       lower:=lower+1;
  189. 01E3               181   ;       end;
  190. 01E3               182   ;     addemup:=sum+lower;  { the last one was left ou
  191. 01E3               183   ;     end;
  192. 01E3               184  ADDEMUP   PROC  NEAR
  193. 01E3 55            185            PUSH  BP
  194. 01E4 8BEC          186            MOV   BP,SP
  195. 01E6 C746040000    187            MOVW  4[BP],0 ; SUM
  196. 01EB               188  XXX6      EQU   $
  197. 01EB 50            189            PUSH  AX
  198. 01EC 8B4608        190            MOV   AX,8[BP] ; LOWER
  199. 01EF 50            191            PUSH  AX
  200. 01F0 8B4606        192            MOV   AX,6[BP] ; UPPER
  201. 01F3 50            193            PUSH  AX
  202. 01F4 E895FF        194            CALL  ISLESS
  203. 01F7 3D0000        195            CMP   AX,0
  204. 01FA 7E15          196            JLE   XXX7
  205. 01FC 8B4604        197            MOV   AX,4[BP] ; SUM
  206. 01FF 034608        198            ADD   AX,8[BP] ; LOWER
  207. 0202 894604        199            MOV   4[BP],AX ; SUM
  208. 0205 8B4608        200            MOV   AX,8[BP] ; LOWER
  209. 0208 050100        201            ADD   AX,1
  210. 020B 894608        202            MOV   8[BP],AX ; LOWER
  211. **** Diagnostic: Could use JMPS
  212. 020E E9DAFF        203            JMP   XXX6
  213. 0211               204  XXX7      EQU   $
  214. 0211 8B4604        205            MOV   AX,4[BP] ; SUM
  215. 0214 034608        206            ADD   AX,8[BP] ; LOWER
  216. 0217 89460A        207            MOV   10[BP],AX ; ADDEMUP
  217. 021A 8B460A        208            MOV   AX,10[BP] ; ADDEMUP
  218. 021D 5D            209            POP   BP
  219. 021E C20800        210            RET   8
  220. 0221               211            ENDP
  221. 0221               212   ;    SYMBOL TABLE
  222. 0221               213   ; ADDEMUP                         10[BP]
  223. 0221               214   ; LOWER                           8[BP]
  224. 0221               215   ; UPPER                           6[BP]
  225. 0221               216   ; SUM                             4[BP]
  226. 0221               217  
  227. 0221               218   ; 
  228. 0221               219   ;   {*********************}
  229. 0221               220   ;   function MAIN(SUM, UPPER);
  230. 0221               221   ;   begin
  231. 0221               222   ;     i:=1;
  232. 0221               223   ;     j:=i+5;
  233. 0221               224   ;     k:=j-16;
  234. 0221               225   ;     problem:=i+(j*k);
  235. 0221               226   ;     writeln('I: ', i, ' J: ', j, ' K: ', k, ' Probl
  236. 0221               227   ;     write('Enter upper ');
  237. 0221               228   ;     upper:=read;
  238. 0221               229   ;     sum:=addemup(1, upper);  {sum of integers 1..up
  239. 0221               230   ;     if isequal(sum, (upper*(upper+1))/2) then
  240. 0221               231   ;       writeln('Sum = ', sum)
  241. 0221               232   ;     else begin
  242. 0221               233   ;       writeln('BUG: Sum = ', sum, '; should be ',
  243. 0221               234   ;                  (upper*(upper+1))/2);
  244. 0221               235   ;       end;
  245. 0221               236   ;     end;
  246. 0221               237  MAIN      PROC  NEAR
  247. 0221 55            238            PUSH  BP
  248. 0222 8BEC          239            MOV   BP,SP
  249. 0224 C70653030100  240            MOVW  I,1 ; I
  250. 022A A15303        241            MOV   AX,I ; I
  251. 022D 050500        242            ADD   AX,5
  252. 0230 A35503        243            MOV   J,AX ; J
  253. 0233 A15503        244            MOV   AX,J ; J
  254. 0236 2D1000        245            SUB   AX,16
  255. 0239 A35703        246            MOV   K,AX ; K
  256. 023C A15703        247            MOV   AX,K ; K
  257. 023F 50            248            PUSH  AX
  258. 0240 A15503        249            MOV   AX,J ; J
  259. 0243 59            250            POP   CX
  260. 0244 F7E9          251            IMULW CX
  261. 0246 50            252            PUSH  AX
  262. 0247 A15303        253            MOV   AX,I ; I
  263. 024A 5A            254            POP   DX
  264. 024B 01D0          255            ADD   AX,DX
  265. 024D A35103        256            MOV   PROBLEM,AX ; PROBLEM
  266. 0250 BB4D03        257            MOV   BX,OFFSET(SS0)
  267. 0253 E8EAFE        258            CALL  SYS_SWRT
  268. 0256 A15303        259            MOV   AX,I ; I
  269. 0259 E8CBFE        260            CALL  SYS_IWRT
  270. 025C BB4803        261            MOV   BX,OFFSET(SS1)
  271. 025F E8DEFE        262            CALL  SYS_SWRT
  272. 0262 A15503        263            MOV   AX,J ; J
  273. 0265 E8BFFE        264            CALL  SYS_IWRT
  274. 0268 BB4303        265            MOV   BX,OFFSET(SS2)
  275. 026B E8D2FE        266            CALL  SYS_SWRT
  276. 026E A15703        267            MOV   AX,K ; K
  277. 0271 E8B3FE        268            CALL  SYS_IWRT
  278. 0274 BB3803        269            MOV   BX,OFFSET(SS3)
  279. 0277 E8C6FE        270            CALL  SYS_SWRT
  280. 027A A15103        271            MOV   AX,PROBLEM ; PROBLEM
  281. 027D E8A7FE        272            CALL  SYS_IWRT
  282. 0280 E8CCFE        273            CALL  SYS_WRTLN
  283. 0283 BB2B03        274            MOV   BX,OFFSET(SS4)
  284. 0286 E8B7FE        275            CALL  SYS_SWRT
  285. 0289 E8CEFE        276            CALL  READ
  286. 028C 894604        277            MOV   4[BP],AX ; UPPER
  287. 028F 50            278            PUSH  AX
  288. 0290 B80100        279            MOV   AX,1
  289. 0293 50            280            PUSH  AX
  290. 0294 8B4604        281            MOV   AX,4[BP] ; UPPER
  291. 0297 50            282            PUSH  AX
  292. 0298 B80000        283            MOV   AX,0
  293. 029B 50            284            PUSH  AX
  294. 029C E844FF        285            CALL  ADDEMUP
  295. 029F 894606        286            MOV   6[BP],AX ; SUM
  296. 02A2 50            287            PUSH  AX
  297. 02A3 8B4606        288            MOV   AX,6[BP] ; SUM
  298. 02A6 50            289            PUSH  AX
  299. 02A7 B80200        290            MOV   AX,2
  300. 02AA 50            291            PUSH  AX
  301. 02AB 8B4604        292            MOV   AX,4[BP] ; UPPER
  302. 02AE 050100        293            ADD   AX,1
  303. 02B1 50            294            PUSH  AX
  304. 02B2 8B4604        295            MOV   AX,4[BP] ; UPPER
  305. 02B5 59            296            POP   CX
  306. 02B6 F7E9          297            IMULW CX
  307. 02B8 99            298            CWD
  308. 02B9 59            299            POP   CX
  309. 02BA F7F9          300            IDIVW CX
  310. 02BC 50            301            PUSH  AX
  311. 02BD E8EEFE        302            CALL  ISEQUAL
  312. 02C0 3D0000        303            CMP   AX,0
  313. 02C3 7E12          304            JLE   XXX8
  314. 02C5 BB2403        305            MOV   BX,OFFSET(SS5)
  315. 02C8 E875FE        306            CALL  SYS_SWRT
  316. 02CB 8B4606        307            MOV   AX,6[BP] ; SUM
  317. 02CE E856FE        308            CALL  SYS_IWRT
  318. 02D1 E87BFE        309            CALL  SYS_WRTLN
  319. **** Diagnostic: Could use JMPS
  320. 02D4 E92D00        310            JMP   XXX9
  321. 02D7               311  XXX8      EQU   $
  322. 02D7 BB1803        312            MOV   BX,OFFSET(SS6)
  323. 02DA E863FE        313            CALL  SYS_SWRT
  324. 02DD 8B4606        314            MOV   AX,6[BP] ; SUM
  325. 02E0 E844FE        315            CALL  SYS_IWRT
  326. 02E3 BB0B03        316            MOV   BX,OFFSET(SS7)
  327. 02E6 E857FE        317            CALL  SYS_SWRT
  328. 02E9 B80200        318            MOV   AX,2
  329. 02EC 50            319            PUSH  AX
  330. 02ED 8B4604        320            MOV   AX,4[BP] ; UPPER
  331. 02F0 050100        321            ADD   AX,1
  332. 02F3 50            322            PUSH  AX
  333. 02F4 8B4604        323            MOV   AX,4[BP] ; UPPER
  334. 02F7 59            324            POP   CX
  335. 02F8 F7E9          325            IMULW CX
  336. 02FA 99            326            CWD
  337. 02FB 59            327            POP   CX
  338. 02FC F7F9          328            IDIVW CX
  339. 02FE E826FE        329            CALL  SYS_IWRT
  340. 0301 E84BFE        330            CALL  SYS_WRTLN
  341. 0304               331  XXX9      EQU   $
  342. 0304 8B4608        332            MOV   AX,8[BP] ; MAIN
  343. 0307 5D            333            POP   BP
  344. 0308 C20600        334            RET   6
  345. 030B 3B2073686F75  335  SS7       DB    '; should be ',0
  346.      6C6420626520
  347.      00
  348. 0318 4255473A2053  336  SS6       DB    'BUG: Sum = ',0
  349.      756D203D2000
  350. 0324 53756D203D20  337  SS5       DB    'Sum = ',0
  351.      00
  352. 032B 456E74657220  338  SS4       DB    'Enter upper ',0
  353.      757070657220
  354.      00
  355. 0338 2050726F626C  339  SS3       DB    ' Problem: ',0
  356.      656D3A2000
  357. 0343 204B3A2000    340  SS2       DB    ' K: ',0
  358. 0348 204A3A2000    341  SS1       DB    ' J: ',0
  359. 034D 493A2000      342  SS0       DB    'I: ',0
  360. 0351               343            ENDP
  361. 0351               344   ;    SYMBOL TABLE
  362. 0351               345   ; MAIN                            8[BP]
  363. 0351               346   ; SUM                             6[BP]
  364. 0351               347   ; UPPER                           4[BP]
  365. 0351               348  
  366. 0351               349   ; 
  367. 0351               350   ; GLOBAL VARIABLES
  368. 0351 0000          351  PROBLEM   DW    0
  369. 0353 0000          352  I         DW    0
  370. 0355 0000          353  J         DW    0
  371. 0357 0000          354  K         DW    0
  372. 0359               355   ; RUNTIME STACK
  373. 0359               356            DS    2000
  374. 0B29 0000          357  STACKORG  DW    0
  375. 0B2B               358   ; MAIN stack space
  376. 0B2B 0000          359            DW    0
  377. 0B2D 0000          360            DW    0
  378. 0B2F 0000          361            DW    0
  379. 0B31               362  ; NO errors
  380.  
  381.  
  382.    0 Error(s) detected
  383.    5 Diagnostic(s) offered
  384.  
  385.  
  386. 817 (331H) Bytes of object code generated
  387.  
  388. Symbol Table Dump:
  389.  
  390. ADDEMUP.........P01E3     I...............M0353     ISEQUAL.........P01AE     
  391. ISLESS..........P018C     J...............M0355     K...............M0357     
  392. MAIN............P0221     PROBLEM.........M0351     READ............P015A     
  393. READLN..........P018A     READ_01.........P015D     READ_02.........P016A     
  394. READ_03.........P0176     READ_04.........P017C     SS0.............M034D     
  395. SS1.............M0348     SS2.............M0343     SS3.............M0338     
  396. SS4.............M032B     SS5.............M0324     SS6.............M0318     
  397. SS7.............M030B     STACKORG........M0B29     SYS_01..........P0120     
  398. SYS_11..........P0129     SYS_21..........P0140     SYS_22..........P0149     
  399. SYS_IWRT........P0127     SYS_RCHAR.......P010A     SYS_SWRT........P0140     
  400. SYS_WHEX........P0114     SYS_WRCHAR......P010F     SYS_WRTLN.......P014F     
  401. XXX0............P01A2     XXX1............P01A7     XXX2............P01C4     
  402. XXX3............P01DC     XXX4............P01D7     XXX5............P01DC     
  403. XXX6............P01EB     XXX7............P0211     XXX8............P02D7     
  404. XXX9............P0304     
  405.